<?php

class AutentificaController extends Zend_Controller_Action {

    public function init() {
        $this->view->baseUrl = $this->_request->getBaseUrl();
    }

    public function indexAction() {
        // action body
    }

    public function loginAction() {

        if ($this->getRequest()->isXmlHttpRequest()) {
            $this->_helper->layout->disableLayout();
            $this->_helper->viewRenderer->setNoRender();

            $nombreUsuario = $this->_request->getPost("nombreUsuario");
            $clave = md5($this->_request->getPost("clave") . '%2+7FVJ.tQuWa8ssM2@J"pb*>nDnZ0x:p\C');
            $usuarios = new Application_Model_DbTable_Usuarios();
            $autentifica = $usuarios->loginUser($nombreUsuario, $clave);
            
            //var_dump($autentifica);

            if ($autentifica == 1) {

                $row = $usuarios->get_user();
                $beneficiarios = new Application_Model_DbTable_Beneficiarios();

                if ($beneficiarios->datosSesionFuncionariosAdministrativos($row->cod_beneficiario) != NULL) {
                    $beneficiario = $beneficiarios->datosSesionFuncionariosAdministrativos($row->cod_beneficiario);
                } else if ($beneficiarios->datosSesionFuncionariosDocentes($row->cod_beneficiario) != NULL) {
                    $beneficiario = $beneficiarios->datosSesionFuncionariosDocentes($row->cod_beneficiario);
                } else if ($beneficiarios->datosSesionEstudiantes($row->cod_beneficiario) != NULL) {
                    $beneficiario = $beneficiarios->datosSesionEstudiantes($row->cod_beneficiario);
                }


                //if (!empty($beneficiario)) {

                    $namespace = new Zend_Session_Namespace("User_Session");
                    $namespace->codigo = $row->cod_beneficiario;
                    $namespace->codigoUd = $beneficiario['codigo_ud'];
                    $namespace->nombreUsuario = $row->nombre_usuario;
                    $namespace->contraseña = $row->contrasena;
                    $namespace->Nombre = $beneficiario['nombres'] . " " . $beneficiario['apellidos'];
                    $namespace->Email = $beneficiario['email_personal'];
                    //$namespace->Facultad = $row->codigoFacultad;
                    $namespace->Rol = "";
                    $namespace->idRol = $row->idRol;
                    //$namespace->cuentaActiva = $row->cuentaActiva;
                    $namespace->cuentaActiva = 1;
                    $namespace->lock(); //bloquear escritura de un namespace
                    Zend_Registry::set("User_Session", $namespace);
                //}
                //Retornamos valor del resultado de la autenticación, en caso de ser igual a uno (1). 
                echo $autentifica;
            } else {
                //Retornamos valor del resultado de la autenticación, en caso de ser diferente a uno (1). 
                echo $autentifica;
            }
        }
    }

    public function logoutAction() {

        //$AuthAdministrador = new Zend_Session_Namespace("User_Administrador");
        //unset($AuthAdministrador);
        //session_destroy();
        //$this->redirect('index');
        // action body
        Zend_Auth::getInstance()->clearIdentity();
        session_destroy();
        $this->redirect('index');
    }

    public function recuperarclaveAction() {
        if ($this->getRequest()->isXmlHttpRequest()) {
            $this->_helper->layout->disableLayout();
            $this->_helper->viewRenderer->setNoRender();
            $usuarios = new Application_Model_DbTable_Usuarios();

            $codigo = $this->_request->getPost("codigo");
            if ($usuarios->verificar($codigo) == 1) {
                $email = $this->_request->getPost("email");
                $usuario = $usuarios->consultar($codigo);
                if ($usuario->email == $email) {
                    $pass = $this->generarClave(5);
                    $clave = $pass . '%2+7FVJ.tQuWa8ssM2@J"pb*>nDnZ0x:p\C';
                    $usuarios->actualizarClave($codigo, md5($clave));
                    $respuesta = 1;
                    $nombres = $usuario->nombres . ' ' . $usuario->apellidos;
                    $usuarios->desactivarcuenta($codigo);
                    $this->enviarCredenciales($codigo, $nombres, $email, $pass);
                } else {
                    $respuesta = "Los datos no coinciden";
                }
            } else {
                $respuesta = "Los datos no coinciden";
            }
            echo $respuesta;
        }
    }

    public function enviarCredenciales($codigo, $nombres, $email, $password) {

        $config = array(
            'auth' => 'login',
            'username' => 'sisbiudbienestarinstitucional@gmail.com',
            'password' => 'sisbiud2013',
            'ssl' => 'ssl',
            //'ssl' => 'tls',
            'port' => '465'
        );

        $transport = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config);
        Zend_Mail::setDefaultTransport($transport);

        $mail = new Zend_Mail("UTF-8");
        $mail->setBodyText('Señor ' . $nombres . ', su contraseña ha sido restablecida con exito. contraseña: ' . $password);
//$mail->setBodyText('Señor Fernando, es un gusto atenderlo');
        $mail->setFrom("sisbiudbienestarinstitucional@gmail.com", "Cuentas Bienestar Institucional");
//$mail->addTo('fernandosambony@gmail.com', "Bienevenido");
        $mail->addTo($email, "Bienvenido");
        $mail->setSubject("Contraseña restablecida");
//$mail->send($transport);
        $mail->send();

        $sent = true;
        try {
            $mail->send();
        } catch (Exception $e) {
            $sent = false;
        }
//Devolvemos si hemos tenido éxito
        return $sent;
    }

    public function generarClave($longitud) {
        $clave = "";
        for ($i = 0; $i < $longitud; $i++) {
            $clave = $clave . chr(mt_rand(48, 90));
        }
        return $clave;
    }

    public function activarcuentaAction() {
        $Administrador = new Zend_Session_Namespace("User_Administrador");
        $Coordinador = new Zend_Session_Namespace("User_Coordinador");
        $Monitor = new Zend_Session_Namespace("User_Monitor");
        //$Administrador->cuentaActiva = 1;
        if ($Administrador->cuentaActiva == 1) {
            //Codigo para activar cuenta Administrador
            $this->_redirect('administrador');
        } else {
            if ($Coordinador->cuentaActiva == 1) {
                //Codigo para activar cuenta Coordinador
                $this->_redirect('coordinador');
            } else {
                if ($Monitor->cuentaActiva == 1) {
                    //Codigo para activar cuenta Monitor
                    $this->_redirect('monitor');
                }
            }
        }
        //Si es una peticion AJAX
        if ($this->getRequest()->isXmlHttpRequest()) {
            $this->_helper->layout->disableLayout();
            $this->_helper->viewRenderer->setNoRender();

            $usuarios = new Application_Model_DbTable_Usuarios();

            if (isset($Administrador->codigo)) {
                //Almacenar nueva contraseña y activar cuenta              
                $usuarios->activarcuenta($Administrador->codigo);
                $password = md5($this->_request->getPost("password") . '%2+7FVJ.tQuWa8ssM2@J"pb*>nDnZ0x:p\C');
                $usuarios->actualizarpassword($Administrador->codigo, $password);
                $Administrador->cuentaActiva = 1;
            } else {
                if (isset($Coordinador->codigo)) {
                    //Almacenar nueva contraseña y activar cuenta              
                    $usuarios->activarcuenta($Coordinador->codigo);
                    $password = md5($this->_request->getPost("password") . '%2+7FVJ.tQuWa8ssM2@J"pb*>nDnZ0x:p\C');
                    $usuarios->actualizarpassword($Coordinador->codigo, $password);
                    $Coordinador->cuentaActiva = 1;
                } else {
                    if (isset($Monitor->codigo)) {
                        //Almacenar nueva contraseña y activar cuenta              
                        $usuarios->activarcuenta($Monitor->codigo);
                        $password = md5($this->_request->getPost("password") . '%2+7FVJ.tQuWa8ssM2@J"pb*>nDnZ0x:p\C');
                        $usuarios->actualizarpassword($Monitor->codigo, $password);
                        $Monitor->cuentaActiva = 1;
                    }
                }
            }
        }
    }

}

/* NOTAS:
 * $namespace->lock(); //bloquear escritura de un namespace
 * 
 * // antes de escribir preguntamos si podemos hacerlo
if (!$namespace->isLocked()) {
    $namespace->bar = "baz";    
}

// lo volvemos a habilitar
$namespace->unLock();
$namespace = new Zend_Session_Namespace("ejemplo");
$namespace->setExpirationSeconds(30, "string"); // $namespace->string expira en 30 segundos
$namespace->setExpirationSeconds(30); // todo el namespace expira en 30 segundos

$namespace->setExpirationHops(4, "string"); // $namespace->string expira en 4 hops
$namespace->setExpirationHops(4); // todo el namespace expira en 4 hops
//hops (cada vez que se carga la pagina se considera un hop).
 */


